import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    // 添加静态资源路径解析插件
    {
      name: 'static-assets-resolver',
      enforce: 'pre',
      resolveId(source) {
        if (source.startsWith('@/assets/')) {
          return {
            id: source.replace('@', '/src'),
            external: true
          }
        }
      }
    }
  ],
  
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  },
  
  // 确保公共资源目录配置正确
  publicDir: 'public',
  
  server: {
    port: 3000,
    open: true,
    cors: true,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path
      }
    }
  },
  
  build: {
    // 指定输出路径
    outDir: 'dist',
    // 生成静态资源的存放路径
    assetsDir: 'assets',
    // 小于此阈值的导入或引用资源将内联为 base64 编码
    assetsInlineLimit: 4096,
    // 启用/禁用 CSS 代码拆分
    cssCodeSplit: true,
    // 构建后是否生成 source map 文件
    sourcemap: false,
    // 自定义底层的 Rollup 打包配置
    rollupOptions: {
      output: {
        // 静态资源分类打包
        chunkFileNames: 'assets/js/[name]-[hash].js',
        entryFileNames: 'assets/js/[name]-[hash].js',
        assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
        // 最小化拆分包
        manualChunks: {
          vue: ['vue', 'vue-router', 'pinia'],
          vant: ['vant']
        }
      }
    },
    // 设置最终构建的浏览器兼容目标
    target: 'es2015',
    // chunk 大小警告的限制
    chunkSizeWarningLimit: 600,
    // 压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能
    minify: 'terser',
    terserOptions: {
      compress: {
        // 生产环境去除console
        drop_console: true,
        drop_debugger: true
      }
    }
  },
  
  // 配置Vite如何处理不同类型的资源
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@/assets/styles/variables.scss";`
      }
    }
  },
  
  // 资源处理配置
  assetsInclude: ['**/*.jpg', '**/*.png', '**/*.svg', '**/*.gif'],
  
  // 优化依赖预构建
  optimizeDeps: {
    include: ['vue', 'vue-router', 'pinia', 'vant']
  }
})